/**
 * 旋转数组算法题
 算法题：给定一个数组，将数组中的元素向右移动 k 个位置，其中 k 是非负数。
  > 示例 1：
    js复制代码输入: [1, 2, 3, 4, 5, 6, 7] 和 k = 3
    输出: [5, 6, 7, 1, 2, 3, 4]
    解释:
    向右旋转 1 步: [7, 1, 2, 3, 4, 5, 6]
    向右旋转 2 步: [6, 7, 1, 2, 3, 4, 5]
    向右旋转 3 步: [5, 6, 7, 1, 2, 3, 4]

  > 示例 2：
    js复制代码输入: [-1, -100, 3, 99] 和 k = 2
    输出: [3, 99, -1, -100]
    解释: 
    向右旋转 1 步: [99, -1, -100, 3]
    向右旋转 2 步: [3, 99, -1, -100]

  > 参考链接：https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/126
 * */ 

let arr = [1, 2, 3, 4, 5, 6, 7]
// let arr = [-1, -100, 3, 99];

function rotateArray(arr, num) {
  if (!Array.isArray(arr) || arr.length < num) return;
  let result = arr.slice(arr.length - num, arr.length).concat(arr);
  result.length = result.length -num;
  return result;
}

function rotateArray2(arr, num) {
  return [...arr.splice(num + 1), ...arr]
}

function rotateArray3(arr, num) {
  const len = arr.length;
  const step = num % len; // 因为步数有可能大于数组长度，所以要先取余
  return arr.slice(-step).concat(arr.slice(0, len - step))
}

function rotateArray4(arr, num) {
  for(let i = 0; i < num; i++) {
    arr.unshift(arr.pop())
  }
  return arr;
}

console.log(rotateArray2( arr, 1))
// console.log(rotateArray4( arr, 2))